iT邦幫忙

2021 iThome 鐵人賽

DAY 14
0
Modern Web

想試試寫程式的感覺,就用 JavaScript 來寫寫看網頁吧系列 第 14

[想試試看JavaScript ] 物件 建構式

  • 分享至 

  • xImage
  •  

昨天做了一個 player 的物件範例

var player=new Object();
player.hp=100;
player.name="Abby";
player.fight=function(){
    this.hp=this.hp-2;
}
player.rest=function(){
    this.hp++;
}
player.report=function(){
    alert(this.name+": "+this.hp)
}

這樣就可以製作的一個簡單的物件來放置一個玩家的資料
不過如果需要第二個玩家的資料的話,就又需要 new 一個 Object

var player2=new Object();
player2.hp=100;
player2.name="Jane";
player2.fight=function(){
    this.hp=this.hp-2;
}
player2.rest=function(){
    this.hp++;
}
player2.report=function(){
    alert(this.name+": "+this.hp);
}

那有沒有比較方便的方法呢?
有!!

建構式

設計建構式

我們可以使用function來建立建構式

function Player(){ // 建構式名稱習慣使用大寫,這是個命名習慣,方便讓其他人一看知道這是一個建構式
    this.name="John";
    this.hp=100;
    this.fight=function(){
        this.hp=this.hp-2;
    }
    this.rest=function(){
        this.hp++;
    }
    this.report=function(){
        alert(this.name+": "+this.hp);
    }
}

使用建構式建立新物件

接著我們就可以利用這個建構式來建立新的物件

var player=new Player();

並且這個新的物件一樣可以使用,我們設計的 fight 方法

player.fight();
player.rest();
player.report();

我們可以使用建構式建立其他新的的物件
並且這兩個物件互相不影響

var player=new Player();
player.fight();
player.rest();
player.report();

var player2=new Player();
player2.fight();
player2.repot();

player 會回報 "John: 99"
player2 會回報 "John: 98"

增加參數

那我想要增加程式碼彈性,讓我可以不要每次建立新物件時,player.name 都是 john
可以使用參數

function Player(name,hp){ // 建構式名稱習慣使用大寫,這是個命名習慣,方便讓其他人一看知道這是一個建構式
    this.name=name; // 參數會傳進這裡
    this.hp=hp;     // 參數會傳進這裡
    this.fight=function(){
        this.hp=this.hp-2;
    }
    this.rest=function(){
        this.hp++;
    }
    this.report=function(){
        alert(this.name+": "+this.hp);
    }
}

增加參數 name 與 hp
修改 this.name="John" 為 this.name=name
修改 this.hp=100 為 this.hp=hp
這樣就修改好建構式

接著就是在建立新物件時,設定參數,決定玩家要叫什麼名子

var player=new Player("Bob",50);
var player2=new Player("abby",100);

player.fight();
player.report();

player2.fight();
player2.report();

這樣就完成使用建構式,快速建立新物件,並且可以給予彈性,利用參數讓每個物件有不同的屬性
這些新的物件在運作的時候以互相不會影響。


上一篇
[想試試看JavaScript ] 物件
下一篇
[想試試看JavaScript ] HTML DOM
系列文
想試試寫程式的感覺,就用 JavaScript 來寫寫看網頁吧30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言